perm filename MEM.FAI[XGP,BGB] blob sn#035650 filedate 1973-05-11 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00005 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	SUBR(MORCOR)------------------------------------------------------
C00004 00003	SUBR(MAKE)TYPE,,RELOC---------------------------------------------
C00006 00004	SUBR(SHRINK)------------------------------------------------------
C00008 00005	REPLACE LINKS ABOVE THE BREAK WITH THEIR NEW VALUES.
C00011 ENDMK
C⊗;
;SUBR(MORCOR)------------------------------------------------------
INTERN OLD44,FILM,BLKCNT,AVAIL
	OLD44:	0
	FILM:	0
	BLKCNT: 0
	AVAIL:	0
	REMAINDER:0
	NODSIZ←←7
SUBR(MORCOR)------------------------------------------------------
BEGIN MORCOR; - GET MORE CORE - BGB - 4 DEC 1972.

;INITIALIZE FILM BLOCK POINTERS WHEN NECESSARY.
	SKIPE OLD44↔GO L1
	MOVE 1,44↔MOVEM 1,OLD44
	AOS 1↔MOVEM 1,FILM
	ADDI 1,3↔MOVEM 1,AVAIL
	AOS 1↔MOVEM 1,BLKCNT
	SETZM REMAINDER

;FOUR MORE K !
L1:	MOVE 1,44↔MOVE 0,1↔ADDI 0,10000
	HRRE 0,0↔JUMPL 0,[FATAL(127K MAX FOR TVFONT, YOU LOSE)]
	CALLI 11↔GO[FATAL(NO MORE CORE.)]
	AOS 1↔SUB 1,REMAINDER↔MOVEM 2,AC2#↔MOVE 2,44
	SETZM(1)↔LIPI(1)↔LAPI(1)1↔BLT(2)

;MAKE AVAIL LIST.
	HRLM 1,1↔ADD 1,[XWD NODSIZ,0]
	SKIPE@BLKCNT↔GO .+3
	ADD 1,[XWD NODSIZ,NODSIZ]↔AOS@BLKCNT
	DAPZ 1,@AVAIL
L2:	HLRZM 1,(1)↔ADD 1,[XWD NODSIZ,NODSIZ]
	CAILE 2,NODSIZ+NODSIZ-1(1)↔GO L2
	SUBI 2,NODSIZ-1(1)↔MOVEM 2,REMAINDER
	MOVEI 10000↔ADDM @FILM
	MOVE 1,FILM↔MOVE[FILBIT+010000]↔MOVEM 2(1)
	MOVE 1,@AVAIL
	MOVE 2,AC2↔POP0J
BEND;12/16/72-----------------------------------------------------
SUBR(MAKE)TYPE,,RELOC---------------------------------------------
BEGIN MAKE; ALLOCATE A NODSIZ BLOCK OF WORDS - BGB - 4 DEC 1972.
	SKIPN 1,@AVAIL
	CALL(MORCOR)
	HRRZ(1)↔HRRM @AVAIL
	SETZM(1)↔AOS @BLKCNT
	POP P,.+3↔POP P,2(1)↔GO @.+1↔0
	POP1J
BEND;1/10/73------------------------------------------------------

SUBR(KILL)NODE----------------------------------------------------
BEGIN KILL; - RELEASE A NODSIZ BLOCK OF WORDS - BGB - 4 DEC 1972.
	MOVE 1,ARG1
	SKIPN 2(1)↔GO[OUTSTR[ASCIZ/	EMPTY NODE KILLED.
/]↔POP1J]↔SOS @BLKCNT
	SETZM(1)↔HRLI(1)↔HRRI 1(1)↔BLT NODSIZ-1(1)
	MOVE @AVAIL↔HRRZM(1)↔HRRZM 1,@AVAIL
	POP1J
BEND;12/17/72-----------------------------------------------------

SUBR(RINGIN)------------------------------------------------------
BEGIN RINGIN;(PART,WHOLE) RING PART INTO A WHOLE -BGB- 6 DEC 1972.
	MOVE 1,ARG2
	MOVE 3,ARG1
	SON 2,3
	JUMPE 2,[SON. 1,3↔CW. 1,(1)↔CCW. 1,(1)↔POP2J]
	CW 3,(2)
	CW. 3,(1)↔CCW. 1,(3)
	CCW. 2,(1)↔CW. 1,(2)
	POP2J↔LIT
BEND;1/10/73------------------------------------------------------
SUBR(SHRINK)------------------------------------------------------
BEGIN SHRINK;SHRINK NODE SPACE - BGB - 17 JANUARY 1973.
	ACCUMULATORS{A,HOLE,BREAK,NODE}
	EXTERNAL ZIPDPY
	CALL(ZIPDPY)			;FLUSH DISPLAY BUFFER POINTERS
	MOVE@BLKCNT↔IMULI NODSIZ↔ADD FILM
	MOVEM BREAK↔MOVEI NODE,-NODSIZ(BREAK)↔SKIPA HOLE,FILM

;FIND A HOLE BELOW THE BREAK.
L1:	ADDI HOLE,NODSIZ↔CAML HOLE,BREAK↔GO L3
	TYPE 0,HOLE↔JUMPN 0,L1

;FIND A NODE ABOVE THE BREAK.
L2:	ADDI NODE,NODSIZ
	CAML NODE,44↔GO[FATAL({SHRINK - NODE CNT TOO BIG.})]
	TYPE 0,NODE↔JUMPE 0,L2

;MOVE THE NODE INTO THE HOLE.
	HRLM NODE,0↔HRRM HOLE,0
	BLT 0,NODSIZ-1(HOLE)
	DAPZ HOLE,0(NODE)	;NODE'S NEW LOCATION.
	GO L1
;REPLACE LINKS ABOVE THE BREAK WITH THEIR NEW VALUES.
	DEFINE KAR(Q){
		HLRZ 1,Q(A)
		CAML 1,BREAK↔MOVE 1,0(1)
		HRLM 1,Q(A)↔GO .+1}
	DEFINE KDR(Q){
		HRRZ 1,Q(A)
		CAML 1,BREAK↔MOVE 1,0(1)
		HRRM 1,Q(A)↔GO .+1}

L3:	MOVE A,FILM	;BLOCK POINTER.
L4:	RELOC 0,A↔TRNE 400000↔MOVEI 333333
	TRNE 200000↔GO[KAR 0]↔ TRNE 100000↔GO[KDR 0]
	TRNE 20000 ↔GO[KAR 1]↔ TRNE 10000 ↔GO[KDR 1]
	TRNE 2000  ↔GO[KAR 3]↔ TRNE 1000  ↔GO[KDR 3]
	TRNE 200   ↔GO[KAR 4]↔ TRNE 100   ↔GO[KDR 4]
	TRNE 20    ↔GO[KAR 5]↔ TRNE 10    ↔GO[KDR 5]
	TRNE 2     ↔GO[KAR 6]↔ TRNE 1     ↔GO[KDR 6]
	ADDI A,NODSIZ↔CAMGE A,BREAK↔GO L4

;SHRINK CORE SIZE AND RESET AVAIL LIST.
	MOVE 0,BREAK↔IORI 0,1777↔CALLI 0,11↔HALT	   ;SHRINK CORE.
	MOVE 1,BREAK↔MOVE 2,44↔DAPZ 1,@AVAIL	   ;NEW BOUNDS.
	MOVEI 0,1(1)↔HRLM 1,0↔SETZM(1)↔BLT(2)	   ;CLEAR AVAILS.
	MOVEI 1(2)↔SUB FILM↔MOVEM@FILM		   ;NEW CORE SIZE.

	LIPI 1,NODSIZ(1)↔GO L6
L5:	HLRZM 1,(1)↔ADD 1,[XWD NODSIZ,NODSIZ]
L6:	CAILE 2,NODSIZ+NODSIZ-1(1)↔GO L5
	SUBI 2,NODSIZ-1(1)↔MOVEM 2,REMAINDER↔POP0J

	LIT
BEND;1/17/73------------------------------------------------------